// index.js
const app = getApp();

Page({
  data: {
    messages: [],
    inputText: '',
    scrollId: '',
    isRecording: false,
    recorderManager: null,
    longPressStartTime: 0,
    sendingStatus: '' // 新增：发送状态提示
  },

  onLoad() {
    // 初始化录音管理器
    this.setData({
      recorderManager: wx.getRecorderManager()
    });

    // 监听录音事件
    this.data.recorderManager.onStart(() => {
      console.log('录音开始');
    });

    this.data.recorderManager.onError((res) => {
      console.error('录音出错:', res);
      this.setData({ isRecording: false });
      wx.showToast({ title: '录音失败', icon: 'none' });
    });

    this.data.recorderManager.onStop((res) => {
      console.log('录音停止:', res);
      this.processAudioFile(res.tempFilePath);
    });

    // 添加初始欢迎消息
    this.addMessage("您好！欢迎使用本资产管理系统智能交互服务。我是您的资产管理小助手，在这里，您可以向我咨询关于资产登记、资产查询、资产盘点、资产折旧计算等方面的问题。比如您想了解如何登记新购入的资产，或者想查询某类资产的详细信息，又或是对资产折旧的规则有疑问等，都可以直接向我提问。请开始输入您的需求吧，我会尽力为您提供准确且有用的帮助。", false);
  },

  onInput(e) {
    this.setData({ inputText: e.detail.value });
  },

  sendMessage() {
    const inputText = this.data.inputText.trim();
    if (!inputText && !this.data.isRecording) return wx.showToast({ title: '请输入内容', icon: 'none' });

    // 如果是录音模式，则不处理文本输入
    if (!this.data.isRecording) {
      this.addMessage(inputText, true);
      this.setData({ sendingStatus: '发送中...' }); // 新增：显示发送中状态

      // 发送请求
      wx.request({
        url: `${app.globalData.pyapi}/chat`,
        method: 'POST',
        data: { input_text: inputText },
        header: { 'content-type': 'application/json' },
        success: (res) => {
          this.setData({ sendingStatus: '' }); // 新增：清除发送状态
          if (res.data.response) {
            this.addMessage(res.data.response, false);
            wx.showToast({ title: '发送成功', icon: 'success', duration: 1000 }); // 新增：成功提示
          } else {
            wx.showToast({ title: '获取回复失败', icon: 'none' });
          }
        },
        fail: (err) => {
          this.setData({ sendingStatus: '' }); // 新增：清除发送状态
          console.error('请求失败:', err);
          wx.showToast({ title: '网络连接失败', icon: 'none' });
        }
      });

      this.setData({ inputText: '' });
    }
  },

  addMessage(content, isUser) {
    const messages = this.data.messages;
    const newMsg = {
      id: Date.now(),
      content,
      isUser
    };
    
    this.setData({
      messages: [...messages, newMsg],
      scrollId: `msg-${messages.length}`
    }, () => {
      // 滚动到底部
      this.scrollToBottom();
    });
  },

  scrollToBottom() {
    setTimeout(() => {
      this.setData({
        scrollId: `msg-${this.data.messages.length}`
      });
    }, 100);
  },

  // 长按开始录音
  startRecord(e) {
    this.setData({
      isRecording: true,
      longPressStartTime: Date.now()
    });

    // 开始录音 - 调整参数以符合微信要求
    this.data.recorderManager.start({
      format: 'mp3', // 使用mp3格式
      duration: 60000, // 最长60秒
      sampleRate: 16000,
      numberOfChannels: 1,
      encodeBitRate: 32000
    });

    wx.showToast({
      title: '录音中...',
      icon: 'none',
      duration: 10000
    });
  },

  // 松开结束录音
  stopRecord(e) {
    if (!this.data.isRecording) return;

    const pressDuration = Date.now() - this.data.longPressStartTime;

    // 如果按下时间太短（小于500ms），则视为点击而不是长按
    if (pressDuration < 500) {
      this.setData({ isRecording: false });
      wx.hideToast();
      this.sendMessage(); // 视为普通点击发送
      return;
    }

    this.setData({ isRecording: false });
    wx.hideToast();

    wx.showLoading({ title: '转换中...' });

    // 停止录音
    this.data.recorderManager.stop();
  },

  // 处理音频文件
  async processAudioFile(tempFilePath) {
    if (!tempFilePath) {
      wx.hideLoading();
      return wx.showToast({ title: '未获取到音频文件', icon: 'none' });
    }

    try {
      // 上传音频文件到微信语音识别服务
      const uploadRes = await new Promise((resolve, reject) => {
        wx.uploadFile({
          url: 'https://api.weixin.qq.com/cgi-bin/media/voice/translatecontent',
          filePath: tempFilePath,
          name: 'media',
          formData: {
            access_token: app.globalData.access_token, // 需要获取有效的access_token
            lfrom: 'zh_CN',
            lto: 'zh_CN'
          },
          success: resolve,
          fail: reject
        });
      });

      wx.hideLoading();

      if (uploadRes.statusCode === 200) {
        try {
          const result = JSON.parse(uploadRes.data);
          if (result.errmsg === 'ok') {
            const text = result.recognition;
            this.setData({ inputText: text });
            this.sendMessage();
            wx.showToast({ title: '语音识别成功', icon: 'success', duration: 1500 }); // 新增：语音识别成功提示
          } else {
            wx.showToast({ title: '语音识别失败', icon: 'none' });
          }
        } catch (e) {
          console.error('解析语音识别结果失败:', e);
          wx.showToast({ title: '解析语音结果失败', icon: 'none' });
        }
      } else {
        wx.showToast({ title: '语音识别失败', icon: 'none' });
      }
    } catch (err) {
      console.error('语音处理失败:', err);
      wx.hideLoading();
      wx.showToast({ title: '语音处理失败', icon: 'none' });
    }
  }
});    